package modelo;

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;

public class MinaDobleConRetardoTests {

	private Municion minaDoble;
	private Coordenada posicion;
	@Before
		
	public void setUp(){
		
		posicion = new Coordenada (1,1);
		minaDoble = new MinaDobleConRetardo(posicion);
	
	}
		
	@Test
	public void testElCostoDeUnaMinaDobleEsDe100Puntos(){
			
		Assert.assertEquals(minaDoble.getCosto(),100);
		
	}
		
	@Test
		
	public void testMinaDobleNoUsadaDebeDarFalse(){
		
		Assert.assertFalse(minaDoble.estaUsada());
	
	}
		
		
	@Test
		
	public void testMinaDobleCon1TurnoUsadaDebeDarFalse(){

		Coordenada  posicion = new Coordenada (1,1);
		Movimiento movimiento = new MovimientoAlSur();
		Orientacion miOrientacion = new OrientacionHorizontal();
		Nave lancha = new Lancha(posicion,movimiento,miOrientacion);
		
		minaDoble.vivir();
		minaDoble.atacar(lancha);
		
		Assert.assertFalse(minaDoble.estaUsada());
		
	}
		
		
	@Test
		
	public void testMinaDobleCon2TurnosUsadaDebeDarFalse(){
			
		Coordenada  posicion = new Coordenada (1,1);
		Movimiento movimiento = new MovimientoAlSur();
		Orientacion miOrientacion = new OrientacionHorizontal();
		Nave lancha = new Lancha(posicion,movimiento,miOrientacion);
		
		minaDoble = new MinaDobleConRetardo(posicion);
		minaDoble.vivir();
		minaDoble.vivir();
		minaDoble.atacar(lancha);
		Assert.assertFalse(minaDoble.estaUsada());
		
	}
		

	@Test
	public void testMinaDobleConTresTurnosUsadaEnPosicionVaciaDebeDarTrue(){
			
		Coordenada  posicion = new Coordenada (1,1);
		minaDoble = new MinaDobleConRetardo(posicion);
		minaDoble.vivir();
		minaDoble.vivir();
		minaDoble.vivir();
		minaDoble.atacar(null);
		Assert.assertTrue(minaDoble.estaUsada());
		
	}
		
	@Test
		
	public void testMinaDobleCon3TurnosUsadaEnPosicionConNaveDebeDarTrue(){
			
		Coordenada  posicion = new Coordenada (1,1);
		Movimiento movimiento = new MovimientoAlSur();
		Orientacion miOrientacion = new OrientacionHorizontal();
		Nave lancha = new Lancha(posicion,movimiento,miOrientacion);
		
		minaDoble = new MinaDobleConRetardo(posicion);
		
		minaDoble.vivir();
		minaDoble.vivir();
		minaDoble.vivir();
		minaDoble.atacar(lancha);		
		Assert.assertTrue(minaDoble.estaUsada());
		
		}
	
	@Test
	
	public void testMinaDobleCon3TurnosUsadaEnPosicionConNaveDebeDestruir(){
			
		Coordenada  posicion = new Coordenada (1,1);
		Movimiento movimiento = new MovimientoAlSur();
		Orientacion miOrientacion = new OrientacionHorizontal();
		Nave lancha = new Lancha(posicion,movimiento,miOrientacion);
		
		minaDoble = new MinaDobleConRetardo(posicion);
		minaDoble.vivir();
		minaDoble.vivir();
		minaDoble.atacar(lancha);		
		posicion = new Coordenada(2,1);
		minaDoble = new MinaDobleConRetardo(posicion);	
		minaDoble.vivir();
		minaDoble.vivir();
		minaDoble.atacar(lancha);
		Assert.assertTrue(lancha.estaDestruida());
	}


}

